﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
using Microsoft.Reporting.WebForms;
namespace FONCREAGROINTEGRAL.Controllers
{
    public class prvvacacionController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();

        public ActionResult Index()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            var query3 = entidades.TIPOTRABAJADORs.Single(cc => cc.Defecto == true);

            // DateTime fechita = new DateTime(query2.Anio - 1, 12, 31);
            //var query = entidades.RHListaProvisionVacaciones(query2.IdEjercicio, query3.IdTipoTrabajador).ToList();
            var query = entidades.RHListaProvisionVacaciones(query3.IdTipoTrabajador, query2.IdEjercicio).ToList();
            //opts.fields = ['IdPeriodoLaboral','IdPersonal' ,'Personal', 'FechaIngreso','DiasCal','RecordVac','DiasGozados','DiasPendientes','Area','CC','Sueldo','Monto'];

            //opts.fields = ['Personal', 'FechaIngreso','DiasCalculados','RecordVacaciones','DiasGozados','DiasPendientes','Nombre','CentroCostos','sueldo','Monto','IdPeriodoLaboral','IdPersonal'];

            var result = (from p in query.ToList()
                          select new
                          {
                              Personal = p.Personal,
                              FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                              DiasCalculados = p.DiasCalculados,
                              RecordVacaciones = p.RecordVacaciones,
                              DiasGozados = p.DiasGozados,
                              DiasPendientes = p.DiasPendientes,
                              Nombre = p.Nombre,
                              CentroCostos = p.CentroCostos,
                              sueldo = p.sueldo,
                              Monto = p.Monto,
                              IdPeriodoLaboral = p.IdPeriodoLaboral,
                              IdPersonal = p.IdPersonal
                          }).ToList();


            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult IndexFiltros()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            var query3 = entidades.TIPOTRABAJADORs.Single(cc => cc.Defecto == true);

            DateTime fecha = new DateTime(query2.Anio - 1, 12, 31);

            string IdTipoTrabajador = Request.QueryString["IdTipo"];
            string IdEjercicio = Request.QueryString["IdPersonal"];

            string fechas = Request.QueryString["FechaInicio"];

            int IdTipE = query2.Anio;
            int TipoTrab = query3.IdTipoTrabajador;

            if (fechas != "")
            {
                fecha = Convert.ToDateTime(Request.QueryString["FechaInicio"]);
            }

            if (IdTipoTrabajador != "")
            {
                TipoTrab = Int32.Parse(Request.QueryString["IdTipo"]);
            }

            if (IdEjercicio != "")
            {

                IdTipE = Int32.Parse(Request.QueryString["IdPersonal"]);
            }


            //var query = entidades.RHListaProvCTServ(IdTipE, fecha, TipoTrab).ToList();
            var query = entidades.RHListaProvisionVacaciones(TipoTrab, IdTipE).ToList();

            var result = (from p in query.ToList()
                          select new
                          {
                              Personal = p.Personal,
                              FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                              DiasCalculados = p.DiasCalculados,
                              RecordVacaciones = p.RecordVacaciones,
                              DiasGozados = p.DiasGozados,
                              DiasPendientes = p.DiasPendientes,
                              Nombre = p.Nombre,
                              CentroCostos = p.CentroCostos,
                              sueldo = p.sueldo,
                              Monto = p.Monto,
                              IdPeriodoLaboral = p.IdPeriodoLaboral,
                              IdPersonal = p.IdPersonal
                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);

        }
        public ActionResult CaluloProvVacacion(int id)
        {
            string strResponse = String.Empty;
            DateTime Fecha = Convert.ToDateTime(Request.Form["Fecha"]);
           // DateTime fecha = new DateTime(Fecha.Year, Fecha.Month, Fecha.Day);
            DateTime fecha = new DateTime(Fecha.Year, Fecha.Month, Fecha.Day);
         //   DateTime thisDate1 = new DateTime(2014, 6, 1);
            try
            {
                #region comentario
                //  var query = entidades.EJERCICIOMES.Single(em => em.idejerciciomes == id);
                //  int mes = Convert.ToInt32(query.mes);
                //     if (mes == Fecha.Month)
                //     {
                #endregion 

                entidades.RHCalcProvVacaciones(fecha, id);
                strResponse = "{success: true,msg:'Vacaciones realizada Correctamente'}";
                return Content(strResponse);

                #region comentario2
                //    }
                /*strResponse = "{success: false,msg:'Fecha de Cambio no Corresponde a Mes Vigente'}";
                return Content(strResponse);*/
                #endregion
            }
            catch (Exception e)
            {
                string sms = e.Message;
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        [HttpPost]
        public ActionResult ProvisionarVacaciones(int id)
        {
            String strResponse = String.Empty;
            try
            {
                int IdPersonal = Convert.ToInt32(Session["IdPersonal"].ToString());
                int IdPersonaltmp = IdPersonal;
                DateTime Fecha = Convert.ToDateTime(Request.Form["Fecha"]);
                DateTime fecha = new DateTime(Fecha.Year,Fecha.Month,Fecha.Day);

               // string Fechas = Fecha.ToString("MM/dd/yyyy HH:mm:ss");
               // entidades.GenerarTRANSACCIONVacaciones(IdPersonaltmp,Fecha,id);

                entidades.GenerarTransaccionVac(IdPersonaltmp,fecha, id);
                strResponse = "{success: true,msg:'<b>Provisión de vacaciones CORRECTO</b>'}";
                return Content(strResponse);
            }
            catch (Exception e)
            {
                string sms = e.Message;
                strResponse = "{success: false,msg:'Fallo en la provisión'}";
                return Content(strResponse);
            }
        }
        public ActionResult rptVacaciones(string idanio, string idtrabajador)
        {
            int pidanio = Int32.Parse(idanio);
            int pidtrabajador = idtrabajador != null && idtrabajador != "null" && !string.IsNullOrEmpty(idtrabajador) ? Int32.Parse(idtrabajador) : 3;
            var query = entidades.RHListaProvisionVacaciones(pidtrabajador, pidanio).ToList();

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/rptProvisionesVacaciones.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHListaProvisionVacaciones(pidtrabajador, pidanio));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension = "xls";
            String deviceInfo = "";
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=rptVacaciones.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }
        public ActionResult rptVacacionesProvicionar(string idanio, string idtrabajador)
        {
            int pidanio = Int32.Parse(idanio);
            int pidtrabajador = idtrabajador != null && idtrabajador != "null" && !string.IsNullOrEmpty(idtrabajador) ? Int32.Parse(idtrabajador) : 3;
            var query = entidades.RHListaProvisionVacaciones(pidtrabajador, pidanio).ToList();

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/rptVacacionesProvicionar.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHListaProvisionVacaciones(pidtrabajador, pidanio));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension = "xls";
            String deviceInfo = "";
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=rptVacaciones.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }
        

    }
}
